Skip to content

fix(core): warn when composeSimple receives modifiers from different …#633

Merged
veged merged 1 commit intobem:masterfrom
shlensky:fix/compose-simple-cross-block-warning
Feb 18, 2026
Merged

fix(core): warn when composeSimple receives modifiers from different …#633
veged merged 1 commit intobem:masterfrom
shlensky:fix/compose-simple-cross-block-warning

Conversation

@shlensky
Copy link
Contributor

Проблема

Функция composeSimple внутри compose — оптимизация, которая объединяет несколько «простых» модификаторов (без кастомного enhance) в один компонент-обёртку вместо цепочки HOC-ов.

При этом она молча предполагает, что все переданные модификаторы принадлежат одному и тому же блоку: __blockName берётся только из первого элемента массива, и на его основе создаётся единственный entity. Названия блоков у остальных модификаторов игнорируются.

Если передать в compose простые модификаторы от разных блоков, все они применяются к первому блоку — результирующие CSS-классы генерируются неверно, и никакого предупреждения при этом не выводится:

// ожидается: Button_size_m Icon_type_close
// по факту:  Button_size_m Button_type_close
compose(
  withBemMod('Button', { size: 'm' }),
  withBemMod('Icon', { type: 'close' }),
)

Решение

В начало composeSimple добавлена проверка: если хотя бы один из модификаторов принадлежит блоку, отличному от первого, в консоль выводится console.error с объектом Error. Использование Error (а не строки) гарантирует, что в консоли отображается полный стектрейс — разработчик сразу видит, где именно был вызван некорректный compose.

Проверка работает в любом окружении (не ограничена __DEV__), поскольку подобная ошибка конфигурации может проявиться и в продакшене.

…blocks

Co-authored-by: Cursor <cursoragent@cursor.com>
@veged veged merged commit 9b4ae9e into bem:master Feb 18, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

Comments